#include <iostream>
#include <vector>

template <typename T>
void Print(const T &v)
{
    for (auto ite = v.begin(); ite != v.end(); ite++)
    {
        std::cout << *ite << " ";
    }
    std::cout << std::endl;
}

int main()
{

    // std::vector<int> v;
    std::vector<int> v = {1, 2, 99, 3, 99, 4};

    // for(int i=0;i<v.size();i++)
    // {
    //     std::cout<<v[i]<<" ";
    // }
    // std::cout<<std::endl;

    // begin() : 容器的头部迭代器，指向容器的第一个元素
    // std::vector<int>::iterator ite = v.begin();
    auto ite_start = v.begin();
    // end() : 容器的尾部迭代器，指向容器的最后一个元素的下一个
    auto ite_end = v.end();
    // std::cout<<*ite_end<<std::endl; // end()位置的值不能去取，会越界
    // v.insert(v.begin()+2,99);
    // Print(v);
    // v.erase(v.begin()+2);
    // Print(v);

    // 删除容器中的同一个元素
    // for (auto ite = v.begin(); ite != v.end();)
    // {
    //     if (*ite == 99)
    //     {
    //         // 元素被删除，迭代器会失效
    //         ite = v.erase(ite);
    //     }
    //     else
    //     {
    //         ite++;
    //     }
    // }
    //v.clear();
    // v.at(10); // 会抛出越界异常
    std::cout<<v.max_size()<<std::endl;
    v.reserve(20);//扩容
    v.shrink_to_fit(); //缩减内存到size
    // v.push_back(1); // 尾插法
    // v.pop_back();   // 尾删法
    
    std::cout << "capacity: " << v.capacity() << std::endl;
    std::cout << "size: " << v.size() << std::endl;
    return 0;
}
